package com.mall.user.domain.service;

import com.mall.user.domain.model.User;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

/**
 * 邮件领域服务
 * 处理与邮件相关的领域逻辑
 */
@Slf4j
@Service
public class EmailDomainService {
    
    /**
     * 发送用户欢迎邮件
     * @param user 新创建的用户
     */
    public void sendWelcomeEmail(User user) {
        if (user == null) {
            log.warn("用户为空，无法发送欢迎邮件");
            return;
        }
        
        if (user.getEmail() == null || user.getEmail().email() == null) {
            log.warn("用户邮箱为空，无法发送欢迎邮件: userId={}", user.getId());
            return;
        }
        
        // 构建欢迎邮件内容
        String emailContent = buildWelcomeEmailContent(user);
        
        // 模拟发送邮件（打印到终端）
        sendEmailToConsole(user.getEmail().email(), "欢迎加入我们！", emailContent);
        
        log.info("欢迎邮件发送成功: userId={}, email={}", user.getId(), user.getEmail().email());
    }
    
    /**
     * 构建欢迎邮件内容
     */
    private String buildWelcomeEmailContent(User user) {
        return String.format(
            "亲爱的 %s，\n\n" +
            "欢迎加入我们的平台！\n\n" +
            "您的账户信息：\n" +
            "- 用户ID: %d\n" +
            "- 用户名: %s\n" +
            "- 年龄: %d\n" +
            "- 邮箱: %s\n\n" +
            "感谢您的注册，祝您使用愉快！\n\n" +
            "此致\n" +
            "商城团队",
            user.getName().name(),
            user.getId(),
            user.getName().name(),
            user.getAge().age(),
            user.getEmail().email()
        );
    }
    
    /**
     * 模拟发送邮件到终端
     */
    private void sendEmailToConsole(String toEmail, String subject, String content) {
        System.out.println("\n" + "=".repeat(80));
        System.out.println("📧 邮件发送模拟");
        System.out.println("=".repeat(80));
        System.out.println("收件人: " + toEmail);
        System.out.println("主题: " + subject);
        System.out.println("发送时间: " + java.time.LocalDateTime.now());
        System.out.println("-".repeat(80));
        System.out.println("邮件内容:");
        System.out.println(content);
        System.out.println("=".repeat(80) + "\n");
    }
    
    /**
     * 验证邮箱格式是否有效
     */
    public boolean isValidEmail(String email) {
        if (email == null || email.trim().isEmpty()) {
            return false;
        }
        // 简单的邮箱格式验证
        return email.matches("^[A-Za-z0-9+_.-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}$");
    }
}